package com.cardetective.shopcar.page.activity.main

import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.widget.EditText
import android.widget.ImageView
import com.aliyun.auikits.aiagent.ARTCAICallEngine
import com.aliyun.auikits.aicall.AUIAIChatInChatActivity
import com.aliyun.auikits.aicall.util.AUIAICallAgentIdConfig
import com.aliyun.auikits.aicall.util.AUIAIConstStrKey
import com.aliyun.auikits.aicall.util.SettingStorage
import com.android.basemvvm.BaseVMActivity
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ToastUtils
import com.cardetective.shopcar.R
import com.cardetective.shopcar.databinding.ActivityAiCreateBinding

import com.google.android.flexbox.FlexDirection
import com.google.android.flexbox.FlexboxLayoutManager

import com.gyf.immersionbar.ImmersionBar
import com.hjq.shape.layout.ShapeLinearLayout
import com.kongzue.dialogx.dialogs.CustomDialog
import com.kongzue.dialogx.interfaces.OnBindView
import com.pinyuana.dragongame.adapter.AiKeyWordsAdapter


class AiCreateActivity : BaseVMActivity<MainViewModel, ActivityAiCreateBinding>() {

    private var mLoginUserId: String? = null
    private var mLoginAuthorization: String? = null
    private val keywordsAdapter by lazy { AiKeyWordsAdapter() }
    var keywordsList = ArrayList<String>()
    private var imageType:String = "1"


    override fun initView(savedInstanceState: Bundle?) {

    }

    override fun initData() {
        ImmersionBar.with(this).statusBarDarkFont(true).init()

        with(mBinding) {
            rootPage.setPadding(0, BarUtils.getStatusBarHeight(), 0, 0)
            setOnViewClick(clCloseAction, tvAddKeywords, llBtnSumbit,ivAiDes)
        }

        // imageType = (1..10).random().toString()
        imageType = (0 until localAvatars.size).random().toString()
        // 新增关键词初始化逻辑
        if (keywordsList.isEmpty()) {
            keywordsList.addAll(keywordsRamade.shuffled().take(5)) // 随机取3个预设关键词
            keywordsAdapter.setList(keywordsList)
            keywordsAdapter.notifyDataSetChanged()
        }

        initListener()
    }

    private fun initListener() {
        val flexBoxLayoutManager = FlexboxLayoutManager(this)
        flexBoxLayoutManager.setFlexDirection(FlexDirection.ROW);//主轴为水平方向，起点在左端。
        mBinding.rcvList.layoutManager = flexBoxLayoutManager
        mBinding.rcvList.adapter = keywordsAdapter
        keywordsAdapter.setList(keywordsList)


        val index = imageType.toInt()
        mBinding.ivHeader.setImageResource(
            if (index in localAvatars.indices) localAvatars[index] 
            else R.mipmap.icon_header_normal
        )
        
//        when (imageType) {
//            "1" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[0])
//            }
//            "2" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[1])
//            }
//            "3" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[2])
//            }
//            "4" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[3])
//            }
//            "5" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[4])
//            }
//            "6" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[5])
//            }
//            "7" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[6])
//            }
//            "8" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[7])
//            }
//            "9" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[8])
//            }
//            "10" -> {
//                mBinding.ivHeader.setImageResource(localAvatars[9])
//            }
//            else -> {
//                mBinding.ivHeader.setImageResource(localAvatars[0])
//            }
//        }
    }

    override fun onClickSlow(view: View?) {
        super.onClickSlow(view)
        when (view) {
            mBinding.clCloseAction -> {
                finish()
            }

            mBinding.tvAddKeywords -> {
                addKeywordsView()
            }

            mBinding.llBtnSumbit -> {
                createChat()
            }
            mBinding.ivAiDes ->{
                mBinding.etDes.setText(desRamade.shuffled().first())
            }
        }
    }

    private fun createChat() {
        val nickname = mBinding.etNickname.text.toString()
        val aiDes = mBinding.etDes.text.toString()

        if (nickname.isEmpty()) {
            ToastUtils.showShort("请输入名称")
            return
        }

        if (aiDes.isEmpty()) {
            ToastUtils.showShort("请输入描述设定")
            return
        }

        mLoginUserId = "user_${java.util.UUID.randomUUID().toString().substring(0, 8)}"  // 生成8位随机用户ID
        mLoginAuthorization = "mock_authorization"
        val useEmotional = SettingStorage.getInstance().getBoolean(
            SettingStorage.KEY_BOOT_ENABLE_EMOTION,
            SettingStorage.DEFAULT_BOOT_ENABLE_EMOTION
        )
        var agentId: String? = ""
        agentId = AUIAICallAgentIdConfig.getAIAgentId(
            ARTCAICallEngine.ARTCAICallAgentType.ChatBot, useEmotional
        )
        val sessionId = mLoginUserId + "_" + agentId;
        jumpToInCallActivity(sessionId, agentId, mLoginUserId ?: "", nickname,aiDes,keywordsList,imageType);
    }

    private fun jumpToInCallActivity(
        sessionId: String,
        agentId: String,
        userId: String,
        nickname: String,
        aiDes: String,
        keywordsList: ArrayList<String>,
        aiImgType: String
    ) {
        val intent = Intent(this, AUIAIChatInChatActivity::class.java)
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_LOGIN_USER_ID, userId)
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_LOGIN_AUTHORIZATION, mLoginAuthorization)
        intent.putExtra(
            AUIAIConstStrKey.BUNDLE_KEY_AI_AGENT_TYPE,
            ARTCAICallEngine.ARTCAICallAgentType.ChatBot
        )
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_AI_AGENT_ID, agentId)
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_IS_SHARED_AGENT, false)
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_SESSION_ID, sessionId)

        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_NICKNAME, nickname)
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_AI_DES, aiDes)
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_AI_KEYWORDS, keywordsList)
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_IMG_TYPE, aiImgType)
        intent.putExtra(AUIAIConstStrKey.BUNDLE_KEY_AI_TYPE, "1")
        startActivity(intent)
        finish()
    }

    /**
     * 添加关键词
     */
    fun addKeywordsView() {
        val screenHeight = windowManager?.defaultDisplay?.height // 屏幕
        val screenWidth = windowManager?.defaultDisplay?.width // 屏幕
        if (screenWidth != null) {
            CustomDialog.show(object :
                OnBindView<CustomDialog>(R.layout.dialog_ai_create_keywords) {
                @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
                override fun onBind(dialog: CustomDialog, v: View) {
                    val et_keywords = v.findViewById<EditText>(R.id.et_keywords)
                    val ll_btn_sumbit = v.findViewById<ShapeLinearLayout>(R.id.ll_btn_sumbit)
                    v.findViewById<ImageView>(R.id.iv_dialog_close).setOnClickListener { dialog.dismiss() }

                    ll_btn_sumbit.setOnClickListener {
                        val keyword = et_keywords.text.toString()
                        if (keyword.isEmpty()) {
                            ToastUtils.showShort("请添加关键词")
                            return@setOnClickListener
                        }

                        keywordsList.add(0,keyword)
                        keywordsAdapter.setList(keywordsList)
                        keywordsAdapter.notifyDataSetChanged()
                        dialog.dismiss()
                        et_keywords.setText("")
                    }
                }
            }).setAlign(CustomDialog.ALIGN.CENTER)
                .setWidth((screenWidth * 0.8).toInt())
                .setMaskColor(Color.parseColor("#4D000000"))
        }
    }

    // AI智能体昵称集合
    private val aiNicknames = listOf(
        "智语助手",    // 自然语言处理
        "逻辑博士",    // 数学推理
        "创想精灵",    // 创意生成
        "代码导师",    // 编程辅助
        "数据先知",    // 数据分析
        "多面学者",    // 跨领域知识
        "时空旅者",    // 历史地理
        "艺术之眼",    // 图像识别
        "万物通晓",    // 物联网应用
        "未来洞察"     // 趋势预测
    )

    // 关键词随机
    public val keywordsRamade = listOf(
       "下一个爆款行业是什么？",
        "只有2000，可以买个什么性价比高的手机？",
        "想学习英语，没有基础怎么办？",
        "电动车买什么牌子比较好？",
        "如何用AI提升工作效率？",
        "健康减脂的饮食方案推荐",
        "ChatGPT有哪些创新用法？",
        "零基础如何做短视频赚钱？",
        "新能源汽车值得现在入手吗？",
        "Python入门最快的学习路径",
        "元宇宙目前有哪些实际应用？",
        "家庭智能家居如何配置？",
        "大学生毕业如何选择城市？",
        "个人隐私如何防止AI泄露？",
        "区块链技术现在能做什么？",
        "如何应对中年职业危机？",
        "跨境电商还能做吗？",
        "儿童教育怎样平衡兴趣与学业？",
        "智能手环的健康数据准确吗？",
        "碳中和会给普通人带来什么机会？",
        "GPT-4相比3.5有哪些提升？",
        "家庭装修如何避免智商税？",
        "自由职业者怎么缴纳社保？",
        "2024年最值得投资的领域？",
        "如何辨别网络谣言？",
        "露营装备该怎么挑选？",
        "年轻人该不该提前还房贷？",
        "电子书和纸质书哪个更好？",
        "如何培养孩子的编程兴趣？",
        "家用投影仪怎么选不踩坑？"
    )

    // 关键词随机
    private val desRamade = listOf(
       "你是一位经验丰富的英语老师，拥有激发学生热情的教学方法。你善于运用幽默和实际应用的案例，是对话充满趣味。",
        "作为资深投资顾问，你精通市场趋势分析，能够用通俗易懂的方式解释复杂的经济概念，帮助用户做出明智决策。",
        "你具备专业营养师资质，擅长根据个人体质定制健康方案，解答饮食搭配问题时总会附带科学依据和实操建议。",
        "你是人工智能领域研究者，熟悉机器学习算法，讲解技术原理时擅长用生活化比喻让小白用户也能轻松理解。", 
        "作为职业规划师，你掌握MBTI性格分析工具，能够通过引导式提问帮助用户发现自身优势并制定职业发展路径。",
        "你扮演科技产品达人，对各类数码设备参数如数家珍，推荐产品时注重平衡性能与价格，分析优缺点时客观中立。",
        "你是金融风控专家，擅长识别投资陷阱，讲解理财知识时习惯用案例教学，提醒用户注意风险时语气亲切自然。",
        "作为心理咨询师，你掌握认知行为疗法，对话中善于运用开放式提问引导用户自我觉察，回应焦虑问题时充满共情。",
        "你化身文学教授，分析作品时既能引经据典，又能结合当下社会现象，让古典文学与现代生活产生奇妙共鸣。",
        "你是智能家居配置专家，熟悉主流物联网协议，解答问题时总会给出分步操作指南和常见问题的排查方法。",
        "作为旅行规划师，你精通各地人文地理，推荐路线时不仅考虑景点，还会融入当地特色美食和文化体验建议。",
        "你扮演职场沟通教练，传授谈判技巧时擅长用角色扮演方式，给出的沟通话术既有理论支撑又具备实操性。"
    )

    // 添加本地头像资源数组
    private val localAvatars = listOf(
        R.mipmap.icon_header_normal,
        R.mipmap.icon_header_normal01,
        R.mipmap.icon_header_normal02,
        R.mipmap.icon_header_normal,
        R.mipmap.icon_header_normal01,
        R.mipmap.icon_header_normal02,
        R.mipmap.icon_header_normal,
        R.mipmap.icon_header_normal01,
        R.mipmap.icon_header_normal02,
        R.mipmap.icon_header_normal,
        R.mipmap.icon_header_normal01,
        R.mipmap.icon_header_normal02,
        R.mipmap.icon_header_normal,
        R.mipmap.icon_header_normal01,
        R.mipmap.icon_header_normal02
    )





}